console.log("OK")
import Vue from 'vue'
// 导入路由模块以及自定义路由模块
import VueRouter from 'vue-router'
Vue.use(VueRouter)
import router from './router.js'


// 导入 vue-resource并安装
import VueResource from 'vue-resource'
Vue.use(VueResource)
// 设置请求的根路径
// Vue.http.options.root = "http://vue.studyit.io"
Vue.http.options.root = "http://www.liulongbin.top:3005/"
// 全局设置post表单数据格式
Vue.http.options.emulateJSON = true;



// 导入渲染根组件
import app from './App.vue'


// // 按需导入mint-ui组件
// import { Header, Swipe, SwipeItem, Button, Lazyload } from 'mint-ui'
// Vue.component(Header.name, Header);                 // 顶部Header
// Vue.component(Swipe.name, Swipe);                   // 轮播图
// Vue.component(SwipeItem.name, SwipeItem);           // 轮播图
// Vue.component(Button.name, Button);                 // 按钮
// Vue.use(Lazyload);                                  // 图片懒加载

// 全部导入
import MintUI from 'mint-ui'
import 'mint-ui/lib/style.css'
Vue.use(MintUI)


// 
import VuePreview from 'vue-preview'
Vue.use(VuePreview)


// 导入MUI样式
import './lib/mui/css/mui.min.css'
import './lib/mui/css/icons-extra.css'


// 导入格式化时间插件
import moment from 'moment'
// 定义全局过滤器
Vue.filter('dateFormat', function (dateStr, pattern = "YYYY-MM-DD HH:mm:ss") {
    return moment(dateStr).format(pattern)
})


// 配置Vuex
import Vuex from 'vuex'
Vue.use(Vuex)
// 创建一个数据仓储对象
var store = new Vuex.Store({
    // 相当于组件中的data
    state: {
        // 存储购物车的商品数据
        // car: [
        //     // { id: "商品的ID", count: "商品的数量", price: "商品的价格", selected: "是否选中"}
        // ]
        car: JSON.parse(localStorage.getItem("car") || "[]")
    },
    // 相当于组件中的methods
    // 如果要操作state属性的值，只能调用该属性提供的方法
    mutations: {
        // 添加商品信息到car数组
        addToCar(state, goodsinfo){
            // 如果购物车之前有对应的商品，则更新数量即可，否则添加商品对象
            var flag = false;           // 假设没有找到的标识符

            state.car.some(item => {
                if (item.id == goodsinfo.id) {
                    item.count += parseInt(goodsinfo.count)
                    flag = true;
                    return true;
                }
            })

            if (!flag) {
                state.car.push(goodsinfo);
            }

            // 当更新了car数组，将该数组存储到localStorage
            localStorage.setItem('car', JSON.stringify(state.car))
        },
        // 修改购物车的商品数量值
        updateGoodsInfo(state, goodsinfo){
            state.car.some(item => {
                if (item.id == goodsinfo.id) {
                    item.count = parseInt(goodsinfo.count)
                    return true;
                }
            })

            // 当更新了car数组，将该数组存储到localStorage
            localStorage.setItem('car', JSON.stringify(state.car))
        },
        // 根据ID删除商品数据
        removeFormCar(state, id){
            state.car.some((item, index) => {
                if (item.id == id) {
                    state.car.splice(index, 1)
                    return true;
                }
            })

            // 当更新了car数组，将该数组存储到localStorage
            localStorage.setItem('car', JSON.stringify(state.car))
        },
        
        updateGoodsSelected(state, info){
            state.car.some((item, index) => {
                if (item.id == info.id) {
                    item.selected = info.selected
                    return true;
                }
            })

            // 当更新了car数组，将该数组存储到localStorage
            localStorage.setItem('car', JSON.stringify(state.car))
        }
    },
    // 相当于组件中的计算属性
    getters: {
        getAllCount(state){
            var c = 0;
            state.car.forEach(item => {
                c += item.count
            })
            return c
        },

        getGoodsCount(state){
            var o = {}
            state.car.forEach(item => {
                o[item.id] = item.count
            })
            return o
        },

        getGoodsSelected(state){
            var o = {}
            state.car.forEach(item => {
                o[item.id] = item.selected
            })
            return o
        },

        getGoodsCountAndAmount(state){
            var o = {
                count: 0,       // 数量
                amount: 0       // 总价
            }

            state.car.forEach(item => {
                if (item.selected) {
                    o.count += item.count
                    o.amount += (item.price * item.count)
                }
            })

            return o

        }
    }
})




var vm = new Vue({
    el: '#app',
    render: c => c(app),
    router,             // 挂在路由对象
    store,
})